home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DDJMAG / DDJ9005.ZIP / AYERS.ZIP / MRKTACTR.CLS < prev    next >
Text File  |  1990-02-24  |  3KB  |  153 lines

  1.  
  2. Object subclass: #MarketActor
  3.   instanceVariableNames: 
  4.     'running msgQueue position notify '
  5.   classVariableNames: ''
  6.   poolDictionaries: '' !
  7.  
  8. !MarketActor class methods !
  9.  
  10. extent  
  11.     ^self form extent.!
  12.  
  13. form  
  14.     ^self formNamed:self imageName.!
  15.  
  16. formNamed:anImageName  
  17.     ^MarketImages at:anImageName.!
  18.  
  19. height  
  20.     ^self form height.!
  21.  
  22. imageName  
  23.     ^'PersonUp'.!
  24.  
  25. new  
  26.     ^super new initialize.!
  27.  
  28. priority
  29.     ^2.!
  30.  
  31. width  
  32.     ^self form width.! !
  33.  
  34.  
  35. !MarketActor methods !
  36.  
  37. alternateForm  
  38.     ^self formNamed:self class alternateImageName.!
  39.  
  40. animate 
  41.     self display:self alternateForm.!
  42.  
  43. display  
  44.     self display:self form at:position.!
  45.  
  46. display:aForm 
  47.     self display:aForm at:position.!
  48.  
  49. display:aForm at:aPoint  
  50.     aForm displayAt:aPoint.!
  51.  
  52. erase 
  53.     Display white:self frame.!
  54.  
  55. extent  
  56.     ^self class extent.!
  57.  
  58. form  
  59.     ^self class form.!
  60.  
  61. formNamed:anImageName  
  62.     ^self class formNamed:anImageName.!
  63.  
  64. frame 
  65.     ^position extent:self extent.!
  66.  
  67. height  
  68.     ^self class height.!
  69.  
  70. initialize
  71.     msgQueue := MessageQueue new.
  72.     running  := false.!
  73.  
  74. messageQueue
  75.     ^msgQueue.!
  76.  
  77. moveBy:delta  
  78.     self moveTo:position + delta.!
  79.  
  80. moveTo:aPoint  
  81.     self  
  82.         erase;  
  83.         position:aPoint;  
  84.         display.!
  85.  
  86. notify  
  87.     (notify isKindOf:Semaphore)  
  88.         ifTrue:[notify signal].!
  89.  
  90. position:aPoint  
  91.     position := aPoint.!
  92.  
  93. priority
  94.     ^self class priority.!
  95.  
  96. receive
  97.     ^msgQueue receive.!
  98.  
  99. release
  100.     msgQueue release.  msgQueue := nil.  notify := nil.
  101.     super release.!
  102.  
  103. run
  104.     |action|
  105.     [running]
  106.         whileTrue:[
  107.             action := self receive.
  108.             (running and:[self respondsTo:action])
  109.                 ifTrue:[self perform:action]].
  110.     self shutdown.!
  111.  
  112. send:aMessage to:anObject
  113.     self send:aMessage to:anObject with:nil.!
  114.  
  115. send:aMessage to:anObject with:anArgument
  116.     |queue|
  117.     (queue := anObject messageQueue) isNil
  118.         ifFalse:[
  119.             queue send:aMessage.
  120.             anArgument isNil
  121.             ifFalse:[queue send:anArgument]].
  122.     Processor yield.!
  123.  
  124. shutdown
  125.     self erase;  notify.!
  126.  
  127. sleep:numberOfSeconds
  128.     |timeout|
  129.     timeout := Time now asSeconds + numberOfSeconds.
  130.     [running and:[Time now asSeconds < timeout]]
  131.         whileTrue:[Processor yield].!
  132.  
  133. start
  134.     running
  135.         ifFalse:[
  136.             running := true.
  137.             [self run] forkAt:self priority].!
  138.  
  139. stop:notifySemaphore
  140.     notify := notifySemaphore.
  141.     running
  142.         ifTrue:[
  143.             running := false.
  144.             self send:#wakeUp to:self]
  145.         ifFalse:[self notify].!
  146.  
  147. wakeUp
  148.         "In case the receiver is waiting
  149.          at the message queue."!
  150.  
  151. width  
  152.     ^self class width.! !
  153.